﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace Arthus
{
    class Posjed
    {
        MySqlConnection konekcija;
        MySqlCommand komanda = new MySqlCommand();
        MySqlDataReader datareader = null;
        MySqlDataAdapter adapter = null;
        DataSet dataset=null;
        DataTable dataTable = null;

        public int VratiIDPosjedaNaOsnovuOznake(String oznakaPosjeda)
        {
            int rezultat = 0;
                try
                {
                    //konekcija sa bazom i punjenje dataset-a
                    konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                    konekcija.Open();
                    komanda.Connection = konekcija;
                    komanda.CommandText = "SELECT POSJEDID FROM POSJED WHERE POSJEDOZN='"+oznakaPosjeda+"';";
                    datareader = komanda.ExecuteReader();
                    while (datareader.Read())
                    {
                        rezultat = (int)datareader.GetValue(0);
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
                }
                finally
                {
                    datareader.Close();
                    konekcija.Close();
                }
            return rezultat;
            } //vraca id poseda na osnovu unete oznake

        public void PopuniComboBox(ComboBox combobox){
            combobox.Items.Clear();
                try
                {
                    //konekcija sa bazom i punjenje dataset-a
                    konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                    komanda.Connection = konekcija;
                    komanda.CommandText = "SELECT POSJEDOZN FROM POSJED;";
                    dataTable = new DataTable();
                    adapter = new MySqlDataAdapter();
                    adapter.SelectCommand = komanda;
                    adapter.Fill(dataTable);

                    adapter.Dispose();
                    konekcija.Close();

                    for (int i = 0; i < dataTable.Rows.Count; i++)
                    {
                        combobox.Items.Add(dataTable.Rows[i][0]);
                    }
                    combobox.SelectedIndex = 0;
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
                }
                finally
                {
                    dataTable.Dispose();
                    adapter.Dispose();
                    konekcija.Close();
                }
        } //punjenje comboBoxa stavkama iz Posjeda

        public void PopuniComboBoxPlusZaSve(ComboBox combobox)
        {
            combobox.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDOZN FROM POSJED;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();
                combobox.Items.Add("Za sve prodajne jedinice");
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    combobox.Items.Add(dataTable.Rows[i][0]);
                }
                combobox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        } //punjenje comboBoxa stavkama iz Posjeda

        public void PopuniComboBoxVeleprodaja(ComboBox combobox)
        {
            combobox.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDOZN FROM POSJED WHERE POSJEDVRS='VP';";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    combobox.Items.Add(dataTable.Rows[i][0]);
                }
                combobox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        } //punjenje comboBoxa stavkama iz Posjeda gde je posjedvrs='VP'

        public void PopuniComboBoxMaloprodaja(ComboBox combobox)
        {
            combobox.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDOZN FROM POSJED WHERE POSJEDVRS='MP';";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    combobox.Items.Add(dataTable.Rows[i][0]);
                }
                combobox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        } //punjenje comboBoxa stavkama iz Posjeda gde je posjedvrs='MP'

        public string VratiOznakuPosjedaNaOsnovuID(int idPosjeda) { //vraca oznaku posjeda na osnovu id-a 
            string rezultat = "";
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDOZN FROM POSJED WHERE POSJEDID="+idPosjeda+";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (string)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public string VratiNazivPosjedaNaOsnovuID(int idPosjeda) {
            string rezultat = "";
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDNAZ FROM POSJED WHERE POSJEDID="+idPosjeda+";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (string)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public string VratiMestoAdresuNaOsnovuID(int idPosjeda) {
            string rezultat = "";
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDAD1 FROM POSJED WHERE POSJEDID=" + idPosjeda + ";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    rezultat = (string)datareader.GetValue(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public void PopuniListBox(ListBox lb) {
            lb.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT POSJEDID, POSJEDOZN FROM POSJED;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    lb.Items.Add(dataTable.Rows[i][0] + ". " + dataTable.Rows[i][1]);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        }

        public void PopuniKontroleNaOsnovuIdPosjeda(int idPosjeda, TextBox oznaka, TextBox naziv, TextBox adresa, TextBox adresa2, TextBox RPO, ComboBox preduzece, 
            TextBox vrsta, TextBox skracenica)
        {
            try
            {
                Posjed tobj = new Posjed();
                Preduzece predObj = new Preduzece();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT POSJEDOZN, POSJEDNAZ, POSJEDAD1, POSJEDAD2, POSJEDRPO, POSJEDPRE, POSJEDVRS, POSJEDVRO, POSJEDPAR "
                    +" FROM POSJED WHERE POSJEDID="+idPosjeda+";";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    oznaka.Text = datareader.GetValue(0).ToString();
                    naziv.Text = datareader.GetValue(1).ToString();
                    adresa.Text = datareader.GetValue(2).ToString();
                    adresa2.Text = datareader.GetValue(3).ToString();
                    RPO.Text = datareader.GetValue(4).ToString();
                    preduzece.SelectedIndex=preduzece.Items.IndexOf(predObj.VratiOznakuPreduzecaNaOsnovuID(Convert.ToInt32(datareader.GetValue(5).ToString())));
                    vrsta.Text=datareader.GetValue(6).ToString();
                    skracenica.Text = datareader.GetValue(7).ToString();
                    PJedinica.PJedinicaForma.idPartnera=Convert.ToInt32(datareader.GetValue(8).ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
        }

        public int VratiPovecanID()
        {
            int rezultat = 0;
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT MAX(POSJEDID) FROM POSJED;";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = Convert.ToInt32(datareader.GetValue(0));
                rezultat++;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public void DodajPosjed(TextBox oznaka, TextBox naziv, TextBox adresa, TextBox adresa2, TextBox RPO, ComboBox preduzece, TextBox vrsta, TextBox skracenica, 
            CheckBox bezPartnera)
        {
            try
            {
                Posjed posjedObjekat = new Posjed();
                Preduzece preduzeceObjekat = new Preduzece();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                if (bezPartnera.Checked == true) {
                    PJedinica.PJedinicaForma.idPartnera = 0;
                }
                komanda.CommandText = string.Format("INSERT INTO `posjed`(`POSJEDID`, `POSJEDOZN`, `POSJEDOZX`, `POSJEDNAZ`, `POSJEDAD1`, `POSJEDAD2`, "
                    +" `POSJEDRPO`, `POSJEDPRE`, `POSJEDPAR`, `POSJEDVRS`, `POSJEDVRO`) VALUES ("+posjedObjekat.VratiPovecanID()+",'"+oznaka.Text+"','"
                    +Razno.IzbrisiPojedineKaraktereIzStringa(oznaka.Text.Trim().ToUpper())+"','"+naziv.Text+"','"+adresa.Text+"','"+adresa2.Text+"','"
                    +RPO.Text+"',"+preduzeceObjekat.VratiIDPreduzecaNaOsnovuOznake(preduzece.SelectedItem.ToString())+","
                    +PJedinica.PJedinicaForma.idPartnera+",'"+vrsta.Text+"','"+skracenica.Text+"')");
                int response = komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno dodata nova prodajna jedinica!");
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Već postoji prodajna jedinica sa takvom oznakom!");
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Greška u formatu unosa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void IzmeniPosjed(int idPosjeda, TextBox oznaka, TextBox naziv, TextBox adresa, TextBox adresa2, TextBox RPO, ComboBox preduzece, TextBox vrsta, TextBox skracenica,
            CheckBox bezPartnera)
        {
            try
            {
                Posjed posjedObjekat = new Posjed();
                Preduzece preduzeceObjekat = new Preduzece();
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                if (bezPartnera.Checked == true)
                {
                    PJedinica.PJedinicaForma.idPartnera = 0;
                }
                komanda.CommandText = @"UPDATE `posjed` SET `POSJEDOZN`='"+oznaka.Text+"',`POSJEDOZX`='"
                    +Razno.IzbrisiPojedineKaraktereIzStringa(oznaka.Text.Trim().ToUpper())+"',`POSJEDNAZ`='"+naziv.Text+"',`POSJEDAD1`='"
                    + adresa.Text + "',`POSJEDAD2`='" + adresa2.Text + "',`POSJEDRPO`='" + RPO.Text + "',`POSJEDPRE`="
                    + preduzeceObjekat.VratiIDPreduzecaNaOsnovuOznake(preduzece.SelectedItem.ToString()) + ",`POSJEDPAR`=" 
                    + PJedinica.PJedinicaForma.idPartnera + ",`POSJEDVRS`='"+vrsta.Text+"',`POSJEDVRO`='"+skracenica.Text+"' WHERE POSJEDID="+idPosjeda+"";
                int response = komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno izmenjena prodajna jedinica!");
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Već postoji prodajna jedinica sa takvom oznakom!");
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Greška u formatu unosa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void ObrisiPosjed(int idPosjeda) {
            try
            {
                Tarifa tarObj = new Tarifa();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "DELETE FROM `posjed` WHERE POSJEDID=" + idPosjeda + ";";
                komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno obrisana prodajna jedinica!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }
    }
}
